package com.example.demo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;


/*
 * Servlet Session
 * HTTP 是一种无状态协议，每次客户端检索网页，客户端打开一个单独的连接到web服务器。服务器会自动不保留之前客户端请求的任何记录。
 * 三种方式维持Web客户端和web服务器之间的session会话 Cookies 隐藏的表单字段 URL重写
 * Cookies
 *   web服务器可以分配一个唯一的session会话ID作为每个Web客户端的Cookie，对于客户端的后续请求可以使用接收到的cookie来识别。一些浏览器不支持cookie,
 * 隐藏的表单字段
 *   一个web服务器可以发送一个隐藏的HTML表单字段，以及一个唯一的session会话ID  <input type="hidden"  name="sessionid" value="123"  />
 *   当表单被提交时，指定的名称和值会被自动包含在GET和POST数据中。每次当Web浏览器发送回请求时，session_id值可以用于保持不同的web浏览器的跟踪
 *   这可能是一种保持session会话跟踪的有效方式。但是点击常规的超文本链接不会导致表单提交。因此隐藏的表单字段也不支持常规的session会话跟踪。
 * URL重写
 *   URL末尾追加一些额外的数据来标识session会话，服务器会把该session会话标识符与已存储的有关session会话的数据相关联。
 *
 *
 *
 *
 * */


@WebServlet("/SessionTrack")
public class SessionTrack extends HttpServlet {

    private static final long serialVersionUID = 1l;

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        Date createTime = new Date(session.getCreationTime());

        Date lastAccessTime = new Date(session.getLastAccessedTime());

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Integer visitCount = new Integer(0);
        String visitCountkey = new String("visitCount");
        String userIDKey = new String("userID");
        String userID = new String("Runoob");


        if (session.getAttribute(visitCountkey) == null) {
            session.setAttribute(visitCountkey, new Integer(0));
        }

        if (session.isNew()) {
            session.setAttribute(userIDKey, userID);
        } else {
            visitCount = (Integer) session.getAttribute(visitCountkey);
            visitCount += 1;
            userID = (String) session.getAttribute(userIDKey);
        }

        session.setAttribute(visitCountkey, visitCount);

        resp.setContentType("text/html;charset=UTF-8");

        PrintWriter out = resp.getWriter();

        out.println(session.getId() + "    " + df.format(createTime) + "    " + df.format(lastAccessTime) + "    " + userID + "     " + visitCount);


    }
}
